//package com.raowb.common.util;
//
//import java.lang.reflect.Field;
//import java.lang.reflect.Method;
//import java.util.ArrayList;
//import java.util.List;
//
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.data.mongodb.core.MongoTemplate;
//import org.springframework.data.mongodb.core.query.Criteria;
//import org.springframework.data.mongodb.core.query.Query;
//import org.springframework.data.mongodb.core.query.Update;
//
///**
// * 
//* @Description: mongo工具 
//* @author: RaoWenbiao
//* @date 2019年3月8日
// */
//public class MongoDbUtil {
//	private static MongoTemplate mongoTemplate = SpringBeanUtil.getBean(MongoTemplate.class);
//	protected static Logger logger = LoggerFactory.getLogger(MongoDbUtil.class);
//
//	/**
//	* 保存对象
//	*
//	* @param entity
//	* @return
//	*/
//	public static Object save(Object entity) {
//		return mongoTemplate.save(entity);
//	}
//
//	/***
//	 * 删除对象
//	 * @param entity
//	 * @return
//	 */
//	public static long delete(Object entity) {
//		return delete(ReflectUtil.getFieldValue(entity, "id"), entity.getClass());
//	}
//
//	/**
//	 * 根据id删除
//	 *
//	 * @param id
//	 * @return
//	 */
//	public static long delete(Object id, Class<?> entityClass) {
//		Query query = new Query(Criteria.where("_id").is(id));
//		return mongoTemplate.remove(query, entityClass).getDeletedCount();
//	}
//
//	/**
//	 * 更新对象
//	 *
//	 * @param entity
//	 * @return
//	 */
//	public static long update(Object entity) {
//
//		Object id = ReflectUtil.getFieldValue(entity, "id");
//		if (id == null) {
//			return 0;
//		}
//		Query query = new Query(Criteria.where("_id").is(id));
//		Update update = getUpdateByObject(entity);
//		// updateFirst 更新查询返回结果集的第一条
//		// updateMulti 更新查询返回结果集的全部
//		// mongoTemplate.updateMulti(query,update,Object.class);
//		// upsert 更新对象不存在则去添加
//		// mongoTemplate.upsert(query,update,Object.class);
//		return mongoTemplate.updateFirst(query, update, entity.getClass()).getModifiedCount();
//	}
//
//	/***
//	 * 新增或修改记录，若不存在该记录则进行添加
//	 * @param srcObj
//	 * @param targetObj
//	 */
//	public static long saveOrUpdate(Object entity) {
//		Object id = ReflectUtil.getFieldValue(entity, "id");
//		if (id == null) {
//			return 0;
//		}
//		Query query = new Query(Criteria.where("_id").is(id));
//		Update update = getUpdateByObject(entity);
//		mongoTemplate.upsert(query, update, entity.getClass()).getModifiedCount();
//		return 1;
//	}
//
//	/**
//	 * 查询所有
//	 *
//	 * @return
//	 */
//	public static <T> List<T> findAll(Class<T> entityClass) {
//		return mongoTemplate.findAll(entityClass);
//	}
//
//	/***
//	 * 根据id查询
//	 * @param id
//	 * @return
//	 */
//	public static <T> T findById(Object id, Class<T> entityClass) {
//		Query query = new Query(Criteria.where("_id").is(id));
//		return mongoTemplate.findOne(query, entityClass);
//	}
//
//	/**
//	 * 根据条件查询集合
//	 *
//	 * @param object
//	 * @return
//	 */
//	@SuppressWarnings("unchecked")
//	public static <T> List<T> findList(T object) {
//		Query query = getQueryByObject(object);
//		return mongoTemplate.find(query, (Class<T>) object.getClass());
//	}
//
//	/***
//	* 根据条件分页查询
//	* @param object
//	* @param start 查询起始值
//	* @param size  查询大小
//	* @return
//	*/
//	public static <T> List<T> findPage(T object, int start, int size) {
//		Query query = getQueryByObject(object);
//		query.skip(start);
//		query.limit(size);
//		return mongoTemplate.find(query, (Class<T>) object.getClass());
//	}
//
//	/***
//	 * 根据条件查询库中符合条件的记录数量
//	 * @param object
//	 * @return
//	 */
//	public static Long getCount(Object object) {
//		Query query = getQueryByObject(object);
//		return mongoTemplate.count(query, object.getClass());
//	}
//
//	/**
//	 * 将查询条件对象转换为query
//	 *
//	 * @param object
//	 * @return
//	 * @author Jason
//	 */
//	private static Query getQueryByObject(Object object) {
//		Query query = new Query();
//		List<String> fileds = getFiledName(object);
//		Criteria criteria = new Criteria();
//		for (int i = 0; i < fileds.size(); i++) {
//			String filedName = (String) fileds.get(i);
//			Object filedValue = ReflectUtil.getFieldValue(object, filedName);
//			if (filedValue != null) {
//				criteria.and(filedName).is(filedValue);
//			}
//		}
//		query.addCriteria(criteria);
//		return query;
//	}
//
//	/**
//	 * 将查询条件对象转换为update
//	 *
//	 * @param object
//	 * @return
//	 * @author Jason
//	 */
//	private static Update getUpdateByObject(Object object) {
//		Update update = new Update();
//		List<String> fileds = getFiledName(object);
//		for (int i = 0; i < fileds.size(); i++) {
//			String filedName = (String) fileds.get(i);
//			Object filedValue = ReflectUtil.getFieldValue(object, filedName);
//			if (filedValue != null) {
//				update.set(filedName, filedValue);
//			}
//		}
//		return update;
//	}
//
//	/***
//	 * 获取对象属性返回字符串数组
//	 * @param o
//	 * @return
//	 */
//	private static List<String> getFiledName(Object o) {
//		Field[] fields = ReflectUtil.getFields(o.getClass());
//		List<String> fieldNames = new ArrayList<>();
//
//		for (int i = 0; i < fields.length; ++i) {
//			if (!"serialVersionUID".equals(fields[i].getName())) {
//				fieldNames.add(fields[i].getName());
//			}
//		}
//		return fieldNames;
//	}
//
//}
